package com.ysw.lucene;

import org.apache.commons.io.FileUtils;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.junit.Test;
import org.wltea.analyzer.lucene.IKAnalyzer;

import java.io.File;

/**
 * @author shiwen
 * @date 2020/6/22
 */
public class CreateIndex {

    /**
     * 创建索引
     *
     * @throws Exception
     */
    @Test
    public void createIndex() throws Exception {
        // 创建一个Director对象，指定索引库保存的位置
        System.out.println("==============通过【单例模式】的方式创建索引=============");
        long startTime = System.currentTimeMillis();
        // 把[索引库]保存在磁盘中
        Directory directory = FSDirectory.open(new File("D:\\lucene\\index").toPath());
        // 基于Directory对象创建一个IndexWriter对象
        IndexWriterConfig config = new IndexWriterConfig(new IKAnalyzer());
        // 创建索引时同时使用IKAnalyzer分析器
        IndexWriter indexWriter = new IndexWriter(directory, config);
        // 读取磁盘上的文件，对应每个文件创建一个文档对象
        File dir = new File("D:\\lucene\\searchsource");
        File[] files = dir.listFiles();
        // 遍历文件
        for (File file : files) {
            // 取文件名
            String fileName = file.getName();
            // 文件的路径
            String filePath = file.getPath();
            // 文件的内容
            String fileContent = FileUtils.readFileToString(file, "utf-8");
            // 文件的大小
            long filesize = FileUtils.sizeOf(file);
            // 创建Field
            // 参数1：域的名称  参数2：域的内容  参数3：是否存储
            Field fieldName = new TextField("name", fileName, Field.Store.YES);
            Field fieldPath = new TextField("path", filePath, Field.Store.YES);
            Field fieldContent = new TextField("content", fileContent, Field.Store.YES);
            Field filedSize = new TextField("size", filesize + "", Field.Store.YES);
            // 创建文档对象
            Document document = new Document();
            // 向文档对象中添加域
            document.add(fieldName);
            document.add(fieldPath);
            document.add(fieldContent);
            document.add(filedSize);
            // 把文档对象写入索引库
            indexWriter.addDocument(document);
        }
        // 关闭IndexWriter对象
        if (indexWriter != null) {
            long endTime = System.currentTimeMillis();
            System.out.println("耗时：" + (endTime - startTime));
            System.out.println("====================索引创建成功======================");
            indexWriter.close();
        }
    }

}